package com.zl.basic.dao;

import com.zl.basic.model.Pager;
import com.zl.basic.model.User;

import java.util.List;
import java.util.Map;

/**
 * User: zl email:c3tc3tc3t@126.com Date: 14-1-11 Time: 下午12:02
 */
public interface IUserDao extends IBaseDao<User> {

  /**
   * 查询数据返回对象列表，不分页
   * 
   * @param hql 查询hql语句
   * @param args 查询参数
   * @return 返回一组对象列表
   */
  List<User> list(String hql, Object[] args);

  /**
   * 查询基于别名和查询参数的混合列表对象,不分页
   * 
   * @param hql 查询hql语句
   * @param args 查询参数
   * @param alias 别名对象
   * @return
   */
  List<User> list(String hql, Object[] args, Map<String, Object> alias);

  /**
   * 查询数据返回对象列表，分页
   * 
   * @param hql 查询hql语句
   * @param args 查询参数
   * @return 返回一组对象列表
   */
  Pager<User> find(String hql, Object[] args);

  /**
   * 查询基于别名和查询参数的混合列表对象 ,分页
   * 
   * @param hql 查询hql语句
   * @param args 查询参数
   * @param alias 别名对象
   * @return
   */
  Pager<User> find(String hql, Object[] args, Map<String, Object> alias);

  /**
   * 根据sql查询对象,不包含关联对象 不分页
   * 
   * @param sql 查询的sql语句
   * @param args 查询参数
   * @param clz 查询试实体对象的class
   * @param hasEntity 该对象是否是一个hibernate管理的实体,如果不是使用setResultTransform查询
   * @return 查询得到的一组对象
   */
  List<User> listUserBySql(String sql, Object[] args, Class<User> clz, boolean hasEntity);

  /**
   * 根据sql查询对象,不包含关联对象 不分页
   * 
   * @param sql 查询的sql语句
   * @param args 查询参数
   * @param clz 查询试实体对象的class
   * @param alias 参数别名
   * @param hasEntity 该对象是否是一个hibernate管理的实体,如果不是使用setResultTransform查询
   * @return 查询得到的一组对象
   */
  List<User> listUserBySql(String sql, Object[] args, Map<String, Object> alias, Class<User> clz,
      boolean hasEntity);

  /**
   * 根据sql查询对象,不包含关联对象 分页
   * 
   * @param sql 查询的sql语句
   * @param args 查询参数
   * @param clz 查询试实体对象的class
   * @param hasEntity 该对象是否是一个hibernate管理的实体,如果不是使用setResultTransform查询
   * @return 查询得到的一组对象
   */

  Pager<User> findUserBySql(String sql, Object[] args, Class<User> clz, boolean hasEntity);

  /**
   * 根据sql查询对象,不包含关联对象 分页
   * 
   * @param sql 查询的sql语句
   * @param args 查询参数
   * @param clz 查询试实体对象的class
   * @param alias 参数别名
   * @param hasEntity 该对象是否是一个hibernate管理的实体,如果不是使用setResultTransform查询
   * @return 查询得到的一组对象
   */
  Pager<User> findUserBySql(String sql, Object[] args, Map<String, Object> alias, Class<User> clz,
      boolean hasEntity);

  /**
   * 根据hql更新对象
   * 
   * @param hql 更新语句
   * @param args 更新参数
   * @return
   */
  void updateByHql(String hql, Object[] args, Map<String, Object> alias);

  /**
   * 根据hql查询一个对象
   * 
   * @param hql 更新语句
   * @param args 更新参数
   * @param alias 参数别名
   * @return
   */
  Object queryObjectByHql(String hql, Object[] args, Map<String, Object> alias);
}
